import java.util.*;
import lombok.val;
public class ValWeirdTypes<Z> {
private List<Z> fieldList;
public ValWeirdTypes() {
super();
}
public void testGenerics() {
List<String> list = new ArrayList<String>();
list.add("Hello, World!");
final @val java.lang.String shouldBeString = list.get(0);
final @val java.util.List<java.lang.String> shouldBeListOfString = list;
final @val java.util.List<java.lang.String> shouldBeListOfStringToo = Arrays.asList("hello", "world");
final @val java.lang.String shouldBeString2 = shouldBeListOfString.get(0);
}
public void testGenericsInference() {
final @val java.util.List<java.lang.Object> huh = Collections.emptyList();
final @val java.util.List<java.lang.Number> huh2 = Collections.<Number>emptyList();
}
public void testPrimitives() {
final @val int x = 10;
final @val long y = (5 + 3L);
}
public void testAnonymousInnerClass() {
final @val java.lang.Runnable y = new Runnable() {
x() {
super();
}
public void run() {
}
};
}
public <T extends Number>void testTypeParams(List<T> param) {
final @val T t = param.get(0);
final @val Z z = fieldList.get(0);
final @val java.util.List<T> k = param;
final @val java.util.List<Z> y = fieldList;
}
public void testBounds(List<? extends Number> lower, List<? super Number> upper) {
final @val java.lang.Number a = lower.get(0);
final @val java.lang.Object b = upper.get(0);
final @val java.util.List<? extends java.lang.Number> c = lower;
final @val java.util.List<? super java.lang.Number> d = upper;
List<?> unbound = lower;
final @val java.util.List<?> e = unbound;
}
public void testCompound() {
final @val java.util.ArrayList<java.lang.String> a = new ArrayList<String>();
final @val java.util.Vector<java.lang.String> b = new Vector<String>();
final @val boolean c = (1 < System.currentTimeMillis());
final @val java.util.AbstractList<java.lang.String> d = (c ? a : b);
java.util.RandomAccess confirm = (c ? a : b);
}
public void nullType() {
final @val java.lang.Object nully = null;
}
public void testArrays() {
final @val int[] intArray = new int[]{1, 2, 3};
final @val java.lang.Object[][] multiDimArray = new Object[][]{{}};
final @val int[] copy = intArray;
final @val java.lang.Object[] single = multiDimArray[0];
final @val int singleInt = copy[0];
}
}